package com.wang.demo05;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

/**
 * @Author 19225
 * @create 2020/12/7 19:11
 */
public class UserProxyInvoderHandler implements InvocationHandler {

    public Object target;

    public void setTarget(Object target) {
        this.target = target;
    }

    public Object getProxy()
    {
       return Proxy.newProxyInstance(this.getClass().getClassLoader(),
               target.getClass().getInterfaces(),
               this);
    }
    //loader 类加载器来定义代理类
    //interfaces 代理类实现的接口列表
    //调度方法调用的调用处理函数
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        Object invoke = method.invoke(target, args);
        return invoke;
        //参数
//proxy - 调用该方法的代理实例
//method -所述方法对应于调用代理实例上的接口方法的实例。方法对象的声明类将是该方法声明的接口，它可以是代理类继承该方法的代理接口的超级接口。
//args -包含的方法调用传递代理实例的参数值的对象的阵列，或null如果接口方法没有参数。原始类型的参数包含在适当的原始包装器类的实例中，例如java.lang.Integer或java.lang.Boolean
    }
}
